#include <iostream>

enum class PrimitiveTypeTagNew : char { Int, Float, String };

template <PrimitiveTypeTagNew Tag>
struct RTTGet {
    static constexpr PrimitiveTypeTagNew value = Tag;
};

int main() {
    constexpr auto intTag = RTTGet<PrimitiveTypeTagNew::Int>::value;
    constexpr auto floatTag = RTTGet<PrimitiveTypeTagNew::Float>::value;
    constexpr auto stringTag = RTTGet<PrimitiveTypeTagNew::String>::value;

    std::cout << "Int tag: " << static_cast<int>(intTag) << std::endl;
    std::cout << "Float tag: " << static_cast<int>(floatTag) << std::endl;
    std::cout << "String tag: " << static_cast<int>(stringTag) << std::endl;

    return 0;
}
